package framework.forms;

import org.openqa.selenium.By;

import webdriver.elements.Label;
import webdriver.elements.Link;
import webdriver.elements.TextBox;

import framework.forms.reestrforms.ReestrPlanovZakupokForm;

/** Базовый класс для форм с левым навигационным меню
 */
public class BaseFormWithLeftSlideBar extends BaseFormWithTopMenu{

	/** Базовый конструктор.
	 * @param titleLocator ожидаемый элемент на форме
	 * @param title название формы
	 */
	protected BaseFormWithLeftSlideBar(By titleLocator, String title) {
		super(titleLocator, title);
	}

	// шаблон ссылок левого меню
	private String leftMenuItemTemplate = "//div[@id='sidebar-left']//div[@class='block']//li//a[contains(.,'%s')]";
	// поле результатов поиска
	private final Label unicalName = new Label(By.xpath("//div[@class='maintab']//div[@class='paging'][contains(.,'Всего найдено')]/span[contains(.,'1')]"), "Запись 'Всего найдено 1'");

	/** Возвращает элемент Label для запись "Найдено всего 1".
	 * 	Обычно нужен для ожидания выполнения поиска на странице.
	 * @return элемент Label для запись "Найдено всего 1"
	 */
	protected Label unicalName(){
		return unicalName;
	}

	/** Перечисление, содержащее список ссылок на левой боковой панели
	 */
	public enum LEFT_MENU_LINKS{
		REEST_PLANOV_ZAKUPOK("Реестр планов закупок");
		private String	val;

		/** Присваивает значение элементу перечисления
		 * @param name значение
		 */
		LEFT_MENU_LINKS(String name) {
			val = name;
		}

		@Override
		public String toString() {
			return val;
		}
	}

	/**
	 * Производит навигацию по левому меню
	 * @param item пункт меню
	 * @return реестр, в зависимости от выбранного пункта
	 */
	public BaseFormWithLeftSlideBar navigateToLeftItem(LEFT_MENU_LINKS item){

		TextBox uName = new TextBox(By.name("reg_login"), "Логин пользователя");
		Link l = new Link(By.xpath(String.format(leftMenuItemTemplate, item.toString())),item.toString());
		l.clickViaJsAndWait();
		browser.waitForPageToLoad();
		if(uName.isPresent()){
			SimulatorLoginForm slForm = new SimulatorLoginForm();
			slForm.login(LoginForm.getLogin(), LoginForm.getPasssword());
			browser.waitForPageToLoad();
		}
		switch(item){
			case REEST_PLANOV_ZAKUPOK:
				return new ReestrPlanovZakupokForm();

			default:
				return new MyCabinetForm();
		}
	}

	/**
	 * Прокликивает пункты верхнего горизонтального меню
	 */
	public void checkLeftMenuItems (){
		for (LEFT_MENU_LINKS item: LEFT_MENU_LINKS.values()){
				navigateToLeftItem(item);
		}
	}
}
